package com.xrit.controller;


import com.aliyuncs.exceptions.ClientException;
import com.xrit.constant.MessageConstant;
import com.xrit.constant.RedisMessageConstant;
import com.xrit.result.Result;
import com.xrit.utils.SMSUtils;
import com.xrit.utils.ValidateCodeUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import redis.clients.jedis.JedisPool;

@RestController
@RequestMapping("validateCode")
public class ValidateCodeController {

    @Autowired
    private JedisPool jedisPool;

    //用户登录发送验证码
    @RequestMapping("send4Login")
    public Result send4Login(String telephone){
        return send(telephone,RedisMessageConstant.SENDTYPE_LOGIN);
    }

    //用户在线体检预约发送验证码
    @RequestMapping("send4Order")
    public Result send4Order(String telephone){
        return send(telephone,RedisMessageConstant.SENDTYPE_ORDER);
    }

    public Result send(String telephone,String sendType){
        //不仅要发送验证码，我们同时需要自己保存下来，因为后期我们还需要做验证码的比对，那么我们选择保存在哪里呢？
        //不会选择保存在MySQL中，而是选择Redis，因为验证码是有时效的，会失效的。所以我们需要做的是：
        //1.给用户发送验证码
        //1.1 生成验证码之前查看验证码是否已经存在
        String key=telephone+"_"+sendType;
        String codeInRedis = jedisPool.getResource().get(key);
        if (StringUtils.isEmpty(codeInRedis)){
            //a 生成验证码
            String code = ValidateCodeUtils.generateValidateCode4String(4);//4位验证码
            //b 阿里云发送验证码(暂时无用)
            /*try {
                SMSUtils.sendShortMessage(SMSUtils.VALIDATE_CODE,telephone,code);
            } catch (ClientException e) {
                e.printStackTrace();
                //失败了就没有必要保存验证码了
                return new Result(false, MessageConstant.SEND_VALIDATECODE_FAIL);
            }*/
            //2.将验证码保存到Redis中
//            jedisPool.getResource().setex(key,50,code);
            jedisPool.getResource().setex(key,50,"6666");
            return new Result(true, MessageConstant.SEND_VALIDATECODE_SUCCESS);
        }
        //如果存在
        return new Result(false, "验证码仍有效，请勿重复发送验证码！");
    }
}
